Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.10.2014, 21:16
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

распарсить строку json
Здравствуйте.
Я понимаю, что этот вопрос не раз обсуждался, но вот у меня не получается распарсить ответ от сервера:
echo json_encode($result);
var obj = '{"success":1, "return":{
"46081993":{
"pair":"btc_rur", "type":"sell", "amount":0.01, "rate":15500, "order_id":425714310, "is_your_order":1, "timestamp":1414332926},
"46061625":{
"pair":"eur_rur", "type":"buy", "amount":0.1, "rate":53.242, "order_id":424877913, "is_your_order":1, "timestamp":1414264805
}}}';
var data = eval("(" + obj + ")");

Ну а дальше все попытки взять параметры amount и rate равны нулю, то есть не получается. Помогите пожалуйста.

Последний раз редактировалось sotik, 27.10.2014 в 00:05.
Ответить с цитированием
  #2 (permalink)  
Старый 26.10.2014, 21:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от sotik
eval
Есть же JSON.parse()
Сообщение от sotik
все попытки взять параметры amount и rate равны нулю
Показывай. И еще: отформатируй пробелами свой JSON. Чтоб было видно структуру.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 27.10.2014, 00:00
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Например вот так:
amount = data.return[0].amount;
или
amount = data[1][0].amount;
или
amount = obj.return[0].amount;
В других ответах легко получалось брать например параметр:
btc = data.return.funds.btc;

с помощью json.parse() не пробовал еще.
Ответить с цитированием
  #4 (permalink)  
Старый 27.10.2014, 00:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,149

sotik,

var obj = '{"success":1, "return":{"46081993":{"pair":"btc_rur", "type":"sell", "amount":0.01, "rate":15500, "order_id":425714310, "is_your_order":1, "timestamp":1414332926},"46061625":{"pair":"eur_rur", "type":"buy", "amount":0.1, "rate":53.242, "order_id":424877913, "is_your_order":1, "timestamp":1414264805}}}';
var data = eval("(" + obj + ")");
     alert(data['return']['46081993'].amount)
Ответить с цитированием
  #5 (permalink)  
Старый 27.10.2014, 01:47
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Спасибо.
Есть маленькая деталь...
номер сделки ('46081993') заранее не известенпоэтому нужно что-то типа подстановки номера ключа:
alert(data['return'][0].amount)
вместо
     alert(data['return']['46081993'].amount)

но оно так не работает...
Ответить с цитированием
  #6 (permalink)  
Старый 27.10.2014, 03:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,149

sotik,
кто вам мешает собрать все номера сделок в массив
var obj = '{"success":1, "return":{"46081993":{"pair":"btc_rur", "type":"sell", "amount":0.01, "rate":15500, "order_id":425714310, "is_your_order":1, "timestamp":1414332926},"46061625":{"pair":"eur_rur", "type":"buy", "amount":0.1, "rate":53.242, "order_id":424877913, "is_your_order":1, "timestamp":1414264805}}}';
var data = eval("(" + obj + ")"),
a=[],i=0;
for(a[i++]in data['return']);
alert(data['return'][a[0]].rate)
Ответить с цитированием
  #7 (permalink)  
Старый 27.10.2014, 03:50
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Сообщение от рони Посмотреть сообщение
sotik,
кто вам мешает собрать все номера сделок в массив
Никто не мешает, а так - отсутствие соответствующих знаний...
Сейчас вот только прочитал целую статью и понял что именно цикл мне и нужен, но не знал более компактного решения.
Спасибо огромное и удачи во всем.
Ответить с цитированием
  #8 (permalink)  
Старый 27.10.2014, 06:52
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от sotik
не знал более компактного решения
Я тоже первый раз вижу такое решение)
Сообщение от рони
a=[],i=0;
for(a[i++]in data['return']);
А вообще не понимаю зачем собирать ключи в массив. Пройдись for..in'ом и делай все что нужно:

(function() {

var response = '{"success":1, "return":{"46081993":{"pair":"btc_rur", "type":"sell", "amount":0.01, "rate":15500, "order_id":425714310, "is_your_order":1, "timestamp":1414332926},"46061625":{"pair":"eur_rur", "type":"buy", "amount":0.1, "rate":53.242, "order_id":424877913, "is_your_order":1, "timestamp":1414264805}}}';
var data = JSON.parse(response);

if (!data.success) {
    return alert('Облом');
}

for (var key in data['return']) {
    var deal = data['return'][key];
    alert(deal.amount);
}


})();
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 04.11.2014, 10:04
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Спасибо за еще одно решение.
Теперь хоть знаю как применять:
var data = JSON.parse(response);
Оба решения мне полезны, так как из массива удобнее сравнивать историю сделок с текущими ордерами.
Ответить с цитированием
  #10 (permalink)  
Старый 10.11.2014, 07:52
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Тут такое дело...
Собрал я номера ордеров в массив, теперь этот массив надо отправить на сервер и там распарсить.
a = {1:33,2:44};
a = JSON.stringify(a);

На серверной стороне:
$a = $_POST[a];
$data = json_decode($a);
Но вот что-то переменная $data не получает эти данные...
Помогите пожалуйста разобраться.

Последний раз редактировалось sotik, 12.11.2014 в 03:04.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить из mysql json строку и преобразовать в js объект 0leg9 AJAX и COMET 7 18.10.2014 15:21
Распарсить JSON gorenie AJAX и COMET 3 29.01.2014 17:14
Не могу распарсить JSON. gorenie jQuery 3 29.11.2013 22:26
Как перевести json строку в js массив? Tek Общие вопросы Javascript 1 25.03.2012 17:11
Как создать строку JSON с переменными? Артем AJAX и COMET 4 01.11.2008 12:12